import sys

from conf import setting
#引入日志
import logging
#对操作系统的相关操作（比如文件操作）
import os
import time
import datetime
#按文件大小滚动备份
from logging.handlers import RotatingFileHandler

#从FILE_PATH字典中获取文件路径
log_path=setting.FILE_PATH["LOG"]
if not os.path.exists(log_path):
    os.mkdir(log_path)
#按时间戳生成日志文件
logfile_name=log_path+r"\test.{}.logs".format(time.strftime("%Y%m%d"))

class RecordLog:
    """
    日志模块
    """
    def __init__(self):
        self.handle_overdue_log()

    def handle_overdue_log(self):
        """处理过期日志文件"""
        #获取系统当前的时间（时分秒）
        now_time=datetime.datetime.now()
        #日期偏移30天，最多保留30天的日志文件，超过自动清理
        offset_date=datetime.timedelta(days=-30)
        #获取前一天的时间戳
        before_date=(now_time+offset_date).timestamp()

        files=os.listdir(log_path)
        for file in files:
            if os.path.splitext(file)[1]:
                filepath=log_path+"\\"+file
                #获取文件创建时间
                file_create_time=os.path.getctime(filepath)
                if file_create_time<before_date:
                    os.remove(filepath)
                else:
                    continue

    def output_logging(self):
        logger=logging.getLogger(__name__)
        if not logger.handlers:
            logger.setLevel(setting.LOG_LEVEL)
            log_format=logging.Formatter(
                '%(levelname)s - %(asctime)s - %(filename)s:%(lineno)d -[%(module)s:%(funcName)s] - %(message)s')

            # maxBytes:控制单个日志文件的大小，单位是字节,backupCount:用于控制日志文件的数量
            fh=RotatingFileHandler(filename=logfile_name,mode='a',maxBytes=5242880,
                                   backupCount=7,
                                   encoding='utf-8')
            fh.setLevel(setting.LOG_LEVEL)
            fh.setFormatter(log_format)

            logger.addHandler(fh)

            sh=logging.StreamHandler()
            sh.setLevel(setting.STREAM_LOG_LEVEL)
            sh.setFormatter(log_format)
            logger.addHandler(sh)
            logger.addHandler(sh)
        return logger

apilog=RecordLog()
logs=apilog.output_logging()